其他
干货 | 从0到1,搭建一个体系完善的前端React组件库
作者简介
剑桥,携程资深前端开发工程师,关注自动化工具开发、前端工程自动构建相关技术。
随着前端工程的发展,组件化的思想早已深入人心;现代的前端框架React/Vue等,都是围绕组件设计;组件化的开发模式,大大提高了开发效率;设计和开发高质量高复用性的公共组件,可以更好地保持产品迭代的高效和稳定。
我们以React的技术栈为背景,在日常的需求与迭代中, 历时两年多时间,沉淀出了携程用车各大产线(接送机/包车/打车服务等)的公共组件(机场、航班、城市、地址、时间控件等)。通过持续交付了一系列的组件库,让各个产线的开发小组不用再各自维护重复而难以迭代的代码,完成了前端组件与公共方法的收口,解决了用车前端业务组件一致性的问题。同时随着组件库工作流上的逐步完善,让前端开发同学脱离了刀耕火种的开发方式,进入了全新的自动化构建与高效开发的时代。
一、实现最基础的npm发布流程
二、组件库的打包处理
module.exports = {
output: {
filename: '[name].js',
path: path.resolve(__dirname, '..', 'dist'),
library: 'Tha',
libraryTarget: 'commonjs2' // umd
}
}
优化前,使用webpack等构建工具打包组件:
{
"scripts": {
"build:components": "webpack --config ./build/webpack.config.js --color",
"build": "npm run build:components && npm run build:css && npm run copy_package"
}
}
优化后, 编写脚本直接对组件源文件转码
{
"scripts": {
"build:components": "cross-env NODE_ENV=production node ./build/trans"
}
}
三、组件库实现业务组件的按需加载
module.exports = {
//按需动态加载的模块
get AddressList() { return require('./Address/List').default; }
};
import { Address } from '@ctrip/thanos-ctrip-mobile/components.biz'
/*
* 等价于
import Address from '@ctrip/thanos-ctrip-mobile/components.biz/Address'
import '@ctrip/thanos-ctrip-mobile/components.biz/Address/style.css'
*/
四、解决组件库日渐臃肿问题
五、解决子组件包的开发环境问题
六、组件库文档化与协同开发
七、组件库单元测试、自动化与持续集成
八、结语
“携程技术”公众号后台回复“新书”,
可免费获得两本书的试读样章~
《携程架构实践》
京东
当当
《携程人工智能实践》
京东
当当
“携程技术”公众号
分享,交流,成长